package main

import (
	"bytes"
	"fmt"
)

//空接口 空接口是指没有定义任何方法的接口。因此任何类型都实现了空接口。
//空接口类型的变量可以存储任意类型的变量。
func main() {
	var in interface{}

	s := "Ding"
	in = s
	fmt.Println(in) //Ding
	show(1, 2, 3)
	//---------------------------------
	//空接口作为map的值
	var map1 = make(map[string]interface{}, 10)
	map1["ding"] = "yangWei"
	map1["age"] = 20
	for s2, i := range map1 {
		fmt.Println(s2, ":", i)
	}
	//------------------------------------
	//空接口的类型断言机制
	//一个接口的值(简称接口值)是由具体类型和具体类型的值两部分组成的.
	//这两部分分别称为接口的动态类型和动态值.
	var inf interface{}
	inf = new(bytes.Buffer)
	s2, ok := inf.(string)
	fmt.Println(s2, ok)
}

//使用空接口作为函数参数
func show(a ...interface{}) {
	for i := range a {
		fmt.Println(i)
	}
}
